Passed
Push — feature/keep-on-fixing ( 777909 )
by Kevin Van
05:52
created

IndexPage   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 328
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 19
eloc 258
dl 0
loc 328
rs 10
c 0
b 0
f 0

15 Functions

Rating   Name   Duplication   Size   Complexity  
A renderATeamCalendarArticle 0 4 1
A renderMatchSlider 0 4 1
A renderBTeamCalendarArticle 0 4 1
A renderYouthCalendarArticle 0 4 1
A renderMakroArticle 0 24 1
A renderSocialMediaArticle 0 38 1
A renderTrooperArticle 0 28 1
A combineAndSortPosts 0 3 3
A renderLayoutMain 0 10 1
A renderPosts 0 36 3
A renderLayoutSidebar 0 31 1
A renderExtraContentFooter 0 8 1
A render 0 31 1
A renderTablebooker 0 31 1
A renderWebsiteFeedbackArticle 0 12 1
1
import React, { Component, Fragment } from "react"
2
import { graphql, Link } from "gatsby"
3
4
import Layout from "../layouts/index"
5
6
import SEO from "../components/seo"
7
import MatchesOverview from "../components/MatchesOverview"
8
import MatchesSlider from "../components/MatchesSlider"
9
import MatchesTabs from "../components/MatchesTabs"
10
import { NewsItemFeatured, NewsItemCardRatio, KcvvTvCard } from "../components/news-item"
11
import { CardImage } from "../components/cards"
12
import UpcomingEvent from "../components/upcoming-event"
13
import PlayerFeatured from "../components/player--featured"
14
15
import MyMakro from "../images/tag-mymakro.png"
16
import Trooper from "../images/tag-trooper.png"
17
import Card from "../components/Card"
18
19
class IndexPage extends Component {
20
  renderMatchSlider = () => (
21
    <section className={`grid-container full`}>
22
      <MatchesSlider />
23
    </section>
24
  )
25
  renderSocialMediaArticle = () => (
26
    <article className={`medium-6 large-12 cell social`}>
27
      <div className={`social-sidebar__wrapper`}>
28
        <a
29
          href="https://facebook.com/KCVVElewijt"
30
          className="btn-social-counter btn-social-counter--fb"
31
          target="_blank"
32
          rel="noopener noreferrer"
33
        >
34
          <div className="btn-social-counter__icon">
35
            <i className="fa fa-facebook"></i>
36
          </div>
37
          <h5 className="btn-social-counter__title">Volg onze Facebook pagina</h5>
38
        </a>
39
        <a
40
          href="https://twitter.com/kcvve"
41
          className="btn-social-counter btn-social-counter--twitter"
42
          target="_blank"
43
          rel="noopener noreferrer"
44
        >
45
          <div className="btn-social-counter__icon">
46
            <i className="fa fa-twitter"></i>
47
          </div>
48
          <h5 className="btn-social-counter__title">Volg ons op Twitter</h5>
49
        </a>
50
        <a
51
          href="http://www.instagram.com/kcvve"
52
          className="btn-social-counter btn-social-counter--instagram"
53
          target="_blank"
54
          rel="noopener noreferrer"
55
        >
56
          <div className="btn-social-counter__icon">
57
            <i className="fa fa-instagram"></i>
58
          </div>
59
          <h5 className="btn-social-counter__title">Volg ons op Instagram</h5>
60
        </a>
61
      </div>
62
    </article>
63
  )
64
  renderMakroArticle = () => (
65
    <Card className={`medium-6 large-12 cell card`} title="MyMakro">
66
      <p>
67
        Link nu jouw Makro voordeelkaart aan onze vereniging. Bij elke aankoop bij Makro en partners steun je KCVV
68
        Elewijt!
69
      </p>
70
      <p>
71
        <img src={MyMakro} alt="QR Code MyMakro" style={{ width: `100%` }} />
72
      </p>
73
      <p>
74
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
75
        <a
76
          href="https://my.makro.be/nl/link-vereniging/02277464"
77
          target="_blank"
78
          rel="noopener noreferrer"
79
          title="MyMakro link voor KCVV Elewijt"
80
          className={`rich-link`}
81
        >
82
          https://my.makro.be/nl/link-vereniging/02277464
83
        </a>
84
        .
85
      </p>
86
      <p>Onze vereniging dankt jullie van harte!</p>
87
    </Card>
88
  )
89
  renderTrooperArticle = () => (
90
    <Card className={`medium-6 large-12 cell card`} title="Trooper">
91
      <p>
92
        Trooper werkt samen met een groot aantal webshops die zich in de kijker willen zetten. In ruil voor een extra
93
        klik via Trooper krijgen wij een percentje op jouw volgende bestelling.
94
      </p>
95
      <p>
96
        <img src={Trooper} alt="QR Code Trooper" style={{ width: `100%` }} />
97
      </p>
98
      <p>
99
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
100
        <a
101
          href="https://trooper.be/kcvvelewijt"
102
          target="_blank"
103
          rel="noopener noreferrer"
104
          title="Trooper link voor KCVV Elewijt"
105
          className={`rich-link`}
106
        >
107
          https://trooper.be/kcvvelewijt
108
        </a>
109
        .
110
      </p>
111
      <p>
112
        <a href="/news/2020-04-12-steun-kcvv-elewijt-trooper-mymakro" className={`rich-link`}>
113
          Lees er hier meer over!
114
        </a>
115
      </p>
116
    </Card>
117
  )
118
  renderYouthCalendarArticle = () => (
119
    <Card className={`medium-6 large-12 cell`} title="Jeugdploegen" hasTable={true}>
120
      <MatchesOverview exclude={[`1`, `2`]} action="next" />
121
    </Card>
122
  )
123
124
  renderBTeamCalendarArticle = () => (
125
    <Card className={`medium-6 large-12 cell`} title="The B-Team" hasTable={true}>
126
      <MatchesTabs teamId="2" />
127
    </Card>
128
  )
129
  renderATeamCalendarArticle = () => (
130
    <Card className={`medium-6 large-12 cell`} title="The A-Team" hasTable={true}>
131
      <MatchesTabs teamId="1" />
132
    </Card>
133
  )
134
135
  renderTablebooker = () => (
136
    <>
137
      <Card className={`medium-6 large-12 cell card`} title="Mosselfestijn" titleIcon="fa-cutlery">
138
        <p>
139
          Op vrijdag 9, zaterdag 10 en zondag 11 oktober 2020 vindt ons jaarlijkse Mosselfestijn weer plaats. Om de
140
          spreiding te kunnen garanderen en wachttijden aan de ingang zoveel mogelijk te beperken werken we dit jaar met
141
          een reservatiesysteem. Hieronder kan je zelf jouw gewenste tijdstip en gezelschap selecteren en een tafel
142
          boeken (voor 07/10/2020).
143
        </p>
144
        <p>
145
          Telefonisch reserveren kan dagelijks tussen 18u en 21u op het nummer
146
          {` `}
147
          <a href="tel:+32498735984">0498.73.59.84</a>
148
        </p>
149
        <p>
150
          Ter plaatse een tafel vragen kan, naargelang de beschikbaarheid op dat moment, maar hou er rekening mee dat we
151
          onze capaciteit hebben moeten verlagen om aan de regelgeving te kunnen voldoen. Wie zeker wil zijn van zijn
152
          plek kan beter reserveren.
153
        </p>
154
      </Card>
155
      <article className={`medium-6 large-12 cell tablebooker`}>
156
        <tbkr-bm-widget
157
          restaurant-id="34742560"
158
          source="website"
159
          use-modal="0"
160
          lang="nl"
161
          theme="light"
162
        ></tbkr-bm-widget>
163
        <script src="https://reservations.tablebooker.com/tbkr-widget-import.min.js"></script>
164
      </article>
165
    </>
166
  )
167
168
  renderWebsiteFeedbackArticle = () => (
169
    <Card className={`medium-6 large-12 cell card`} title="Website feedback" titleIcon="fa-commenting-o">
170
      <p>
171
        Na lang zwoegen is onze nieuwe website eíndelijk online geraakt! We zijn heel benieuwd naar jullie mening of
172
        feedback. Als jullie vinden dat er iets ontbreekt, of als je bepaalde fouten tegenkomt, zouden we het ten
173
        zeerste appreciëren als je ons even iets laat weten op{` `}
174
        <a href="mailto:[email protected]" className={`rich-link`}>
175
          [email protected]
176
        </a>
177
        !
178
      </p>
179
    </Card>
180
  )
181
  renderExtraContentFooter = (preseason) => (
182
    <section className="grid-container site-content">
183
      <div className="grid-x grid-margin-x">
184
        <section className={`cell large-12 featured-article`}>
185
          <CardImage title="Update voorbereiding 2020-2021" localFile={preseason} link="/games" metadata={false} />
186
        </section>
187
      </div>
188
    </section>
189
  )
190
191
  // convertGraphqlToPlayerObject = (player) => {
192
  //   return {
193
  //     nameFirst: player.field_firstname,
194
  //     nameLast: player.field_lastname,
195
  //     shirtNr: player.field_shirtnumber,
196
  //     position: player.field_position,
197
  //     imageSrc:
198
  //       player.relationships.field_image.localFile.childImageSharp.fixed.src,
199
  //     link: player.path.alias,
200
  //   }
201
  // }
202
203
  // renderPlayerOfTheWeek = (featuredPlayer) =>
204
  //   featuredPlayer.edges.map(
205
  //     ({ node: potw }) =>
206
  //       potw.relationships.field_player && (
207
  //         <article
208
  //           className={"medium-6 large-12 cell card"}
209
  //           key={potw.relationships.field_player.field_firstname}
210
  //         >
211
  //           <header className={"card__header"}>
212
  //             <h4>Speler van de week</h4>
213
  //           </header>
214
  //           <PlayerFeatured
215
  //             player={this.convertGraphqlToPlayerObject(
216
  //               potw.relationships.field_player
217
  //             )}
218
  //           />
219
  //         </article>
220
  //       )
221
  //   )
222
223
  renderPosts = (posts) => {
224
    let articleCount = 0
225
    let kcvvTvCount = 0
226
227
    return posts.map(({ node }, i) => {
228
      switch (node.internal.type) {
229
        case `node__article`:
230
          node.field_featured && (articleCount = articleCount + 2)
231
          !node.field_featured && articleCount++
232
          return (
233
            <Fragment key={i}>
234
              {node.field_featured && <NewsItemFeatured node={node} />}
235
              {!node.field_featured && <NewsItemCardRatio node={node} teaser={true} />}
236
            </Fragment>
237
          )
238
        case `node__kcvv_tv`:
239
          if (kcvvTvCount === 0) {
240
            articleCount = articleCount + 2
241
            kcvvTvCount++
242
            return (
243
              <CardImage
244
                title={node.title}
245
                localFile={node.relationships.field_media_article_image.relationships.field_media_image.localFile}
246
                link={node.field_website.uri}
247
                metadata={false}
248
                key={i}
249
              />
250
            )
251
          } else {
252
            articleCount = articleCount + 2
253
            kcvvTvCount++
254
            return <KcvvTvCard node={node} teaser={true} key={i} />
255
          }
256
257
        default:
258
          return ``
259
      }
260
    })
261
  }
262
263
  combineAndSortPosts = (featuredPosts, kcvvTv) => {
264
    return [...featuredPosts.edges, ...kcvvTv.edges].sort((a, b) =>
265
      a.node.timestamp < b.node.timestamp ? 1 : b.node.timestamp < a.node.timestamp ? -1 : 0
266
    )
267
  }
268
269
  renderLayoutSidebar = () => {
270
    const { featuredPlayer } = this.props.data
271
    return (
272
      <>
273
        {/* TABLEBOOKER WIDGET */}
274
        {/* { this.renderTablebooker() } */}
275
276
        {/* A TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING*/}
277
        {this.renderATeamCalendarArticle()}
278
279
        {/* B TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING */}
280
        {this.renderBTeamCalendarArticle()}
281
282
        {/* YOUTH TEAMS OVERVIEW - SUMMARY OF UPCOMING MATCHES */}
283
        {this.renderYouthCalendarArticle()}
284
285
        {/* PLAYER OF THE WEEK ARTICLE IF ANY */}
286
        {/* {featuredPlayer && this.renderPlayerOfTheWeek(featuredPlayer)} */}
287
288
        {/* INFO ARTICLE WITH SOCIAL MEDIA LINKS */}
289
        {this.renderSocialMediaArticle()}
290
291
        {/* INFO ARTICLE WITH REQUEST FOR WEBSITE FEEDBACK */}
292
        {this.renderWebsiteFeedbackArticle()}
293
294
        {/* INFO ARTICLE WITH "TROOPER" CONTENT */}
295
        {this.renderTrooperArticle()}
296
297
        {/* INFO ARTICLE WITH "MYMAKRO" CONTENT */}
298
        {this.renderMakroArticle()}
299
      </>
300
    )
301
  }
302
303
  renderLayoutMain = () => {
304
    const { featuredPosts, kcvvTv } = this.props.data
305
    const posts = this.combineAndSortPosts(featuredPosts, kcvvTv)
306
307
    return (
308
      <>
309
        <UpcomingEvent />
310
311
        {posts && this.renderPosts(posts)}
312
      </>
313
    )
314
  }
315
316
  render() {
317
    return (
318
      <Layout>
319
        <SEO
320
          lang="nl-BE"
321
          title="Er is maar één plezante compagnie"
322
          description="Startpagina van stamnummer 00055: KCVV Elewijt."
323
        />
324
        {/* {this.renderExtraContentFooter(this.props.data.preseason)} */}
325
326
        <section className="grid-container site-content">
327
          {/* LIMITED-WIDTH CONTAINER WITH EXTRA (STICKY) CONTENT, IF ANY */}
328
329
          <div className="grid-x grid-margin-x">
330
            <section className="cell large-8 news_overview__wrapper">
331
              {/* MAIN CONTENT AREA */}
332
              {this.renderLayoutMain()}
333
            </section>
334
            <aside className="cell large-4">
335
              <section className="grid-x featured__matches grid-margin-x">
336
                {/* SIDEBAR CONTENT */}
337
                {this.renderLayoutSidebar()}
338
              </section>
339
            </aside>
340
          </div>
341
        </section>
342
343
        {/* FULL-WIDTH SLICK SLIDER WITH UPCOMING MATCHES */}
344
        {this.renderMatchSlider()}
345
      </Layout>
346
    )
347
  }
348
}
349
350
export const pageQuery = graphql`
351
  query {
352
    featuredPosts: allNodeArticle(
353
      filter: { status: { eq: true }, promote: { eq: true } }
354
      sort: { fields: created, order: DESC }
355
      limit: 10
356
    ) {
357
      edges {
358
        node {
359
          id
360
          path {
361
            alias
362
          }
363
          created(formatString: "D/M/YYYY")
364
          changed(formatString: "D/M/YYYY")
365
          timestamp: changed(formatString: "x")
366
          title
367
          promote
368
          status
369
          field_featured
370
          body {
371
            value
372
            format
373
            processed
374
            summary
375
          }
376
          relationships {
377
            field_media_article_image {
378
              ...ArticleImage
379
            }
380
            field_tags {
381
              name
382
              path {
383
                alias
384
              }
385
            }
386
          }
387
          internal {
388
            type
389
          }
390
        }
391
      }
392
    }
393
    preseason: file(name: { eq: "preseason2020-2021" }) {
394
      ...KCVVFluid960
395
    }
396
    kcvvTv: allNodeKcvvTv(
397
      filter: { status: { eq: true }, promote: { eq: true } }
398
      sort: { fields: created, order: DESC }
399
      limit: 5
400
    ) {
401
      edges {
402
        node {
403
          id
404
          created(formatString: "D/M/YYYY")
405
          title
406
          timestamp: created(formatString: "x")
407
          relationships {
408
            field_media_article_image {
409
              ...ArticleImage
410
            }
411
          }
412
          field_website {
413
            uri
414
          }
415
          internal {
416
            type
417
          }
418
        }
419
      }
420
    }
421
    featuredPlayer: allNodePotw(sort: { fields: created, order: DESC }, filter: { status: { eq: true } }, limit: 1) {
422
      edges {
423
        node {
424
          relationships {
425
            field_player {
426
              field_firstname
427
              field_lastname
428
              field_shirtnumber
429
              field_position
430
              relationships {
431
                field_image {
432
                  localFile {
433
                    ...KCVVFixedPlayerTeaser
434
                  }
435
                }
436
              }
437
              path {
438
                alias
439
              }
440
            }
441
          }
442
        }
443
      }
444
    }
445
  }
446
`
447
448
export default IndexPage
449